/**
 * sort.h
 * 通用排序接口声明。*/

#ifndef SORT_H
#define SORT_H
#include <stddef.h>

/* 0 若 k1=k2；>0 若 k1>k2；<0 若 k1<k2 */
typedef int  (*SORT_KCMP_F) (const void *k1, const void *k2);

/* t[ci] = t[pi] */
typedef void (*SORT_SHIFT_F)(void *t, size_t pi, size_t ci) ;

/**
 * @brief 插入升序排序，适用于小量或基本有序数据
 *
 * @param t     目标数据
 * @param tsize 单个数据大小
 * @param tnum  目标数据个数
 * @param kcmp  比较回调
 * @param swap  交换回调 */
void insert(void *t, size_t tsize, size_t tnum,
            SORT_KCMP_F kcmp, SORT_SHIFT_F shift);

#endif